package com.iotp.service.organization;


import com.iotp.entity.organization.Organization;

import java.math.BigDecimal;
import java.util.List;

/**
 * 系统机构业务接口
 * @author Assassin
 */
public interface OrganizationService {

	// Methods

   /**
	* 添加系统机构根机构
	* @param orgType 标识信息-机构类型
	* @param orgName 基本信息-机构名称
	* @param orgAliasName 基本信息-机构别名
	* @param orgDesc 基本信息-机构说明
	* @param orgPhone 基本信息-机构电话
	* @param orgFax 基本信息-机构传真
	* @param orgWebsite 基本信息-机构网址
	* @param provinceId 位置信息-机构省Id
	* @param cityId 位置信息-机构市Id
	* @param districtId 位置信息-机构区Id
	* @param orgAddress 位置信息-机构地址
	* @param lng 位置信息-机构经度
	* @param lat 位置信息-机构纬度
	* @param orgManagerId 管理信息-机构负责人Id
	* @param orgManagerName 管理信息-机构负责人名称
	* @param orgManagerPhone 管理信息-机构负责人电话
	* @return Long orgId 添加后的数据库主键值
	*/
	public Long addRoot(Integer orgType, String orgName, String orgAliasName, String orgDesc, String orgPhone,
                        String orgFax, String orgWebsite, String provinceId, String cityId, String districtId, String orgAddress,
                        BigDecimal lng, BigDecimal lat, Long orgManagerId, String orgManagerName, String orgManagerPhone);

   /**
	* 添加系统机构子机构
	* @param orgPid 层级信息-机构父级Id
	* @param orgName 基本信息-机构名称
	* @param orgAliasName 基本信息-机构别名
	* @param orgDesc 基本信息-机构说明
	* @param orgPhone 基本信息-机构电话
	* @param orgFax 基本信息-机构传真
	* @param orgWebsite 基本信息-机构网址
	* @param provinceId 位置信息-机构省Id
	* @param cityId 位置信息-机构市Id
	* @param districtId 位置信息-机构区Id
	* @param orgAddress 位置信息-机构地址
	* @param lng 位置信息-机构经度
	* @param lat 位置信息-机构纬度
	* @param orgManagerId 管理信息-机构负责人Id
	* @param orgManagerName 管理信息-机构负责人名称
	* @param orgManagerPhone 管理信息-机构负责人电话
	* @return Long orgId 添加后的数据库主键值
	*/
	public Long addSub(Long orgPid, String orgName, String orgAliasName, String orgDesc, String orgPhone,
                       String orgFax, String orgWebsite, String provinceId, String cityId, String districtId, String orgAddress,
                       BigDecimal lng, BigDecimal lat, Long orgManagerId, String orgManagerName, String orgManagerPhone);
	
   /**
	* 删除系统机构
	* @param orgId 主键值
	*/
	public void delete(Long orgId);

   /**
	* 更新系统机构
	* @param orgId 标识信息-机构Id
	* @param orgStatus 状态信息-机构数据状态
	* @param isDel 状态信息-是否删除[1-是 | 0-否]
	* @param orgOrder 状态信息-机构排序
	* @param orgName 基本信息-机构名称
	* @param orgAliasName 基本信息-机构别名
	* @param orgDesc 基本信息-机构说明
	* @param orgPhone 基本信息-机构电话
	* @param orgFax 基本信息-机构传真
	* @param orgWebsite 基本信息-机构网址
	* @param provinceId 位置信息-机构省Id
	* @param cityId 位置信息-机构市Id
	* @param districtId 位置信息-机构区Id
	* @param orgAddress 位置信息-机构地址
	* @param lng 位置信息-机构经度
	* @param lat 位置信息-机构纬度
	* @param orgManagerId 管理信息-机构负责人Id
	* @param orgManagerName 管理信息-机构负责人名称
	* @param orgManagerPhone 管理信息-机构负责人电话
	*/
	public void edit(Long orgId, Integer orgStatus, Integer isDel, Integer orgOrder, String orgName, String orgAliasName, String orgDesc, String orgPhone,
                     String orgFax, String orgWebsite, String provinceId, String cityId, String districtId, String orgAddress,
                     BigDecimal lng, BigDecimal lat, Long orgManagerId, String orgManagerName, String orgManagerPhone);

   /**
	* 主键查询系统机构
	* @param -organization 参数实体
	* @return Organization 实体
	*/
	public Organization queryById(Long orgId);

   /**
	* 根据条件查询系统机构列表
	* @param orgId 标识信息-机构Id[主键值]
	* @param orgCode 标识信息-机构编码
	* @param orgType 标识信息-机构类型
	* @param orgStatus 状态信息-机构数据状态
	* @param isDel 状态信息-是否删除[1-是 | 0-否]
	* @param orgOrder 状态信息-机构排序
	* @param orgLevel 层级信息-机构层级
	* @param isParent 层级信息-是否父级[1-是 | 0-否]
	* @param orgPid 层级信息-父级Id[ROOT-0]
	* @param orgName 基本信息-机构名称
	* @param orgAliasName 基本信息-机构别名
	* @param orgDesc 基本信息-机构说明
	* @param orgPhone 基本信息-机构电话
	* @param orgFax 基本信息-机构传真
	* @param orgWebsite 基本信息-机构网址
	* @param provinceId 位置信息-机构省Id
	* @param cityId 位置信息-机构市Id
	* @param districtId 位置信息-机构区Id
	* @param orgAddress 位置信息-机构地址
	* @param lng 位置信息-机构经度
	* @param lat 位置信息-机构纬度
	* @param orgManagerId 管理信息-机构负责人Id
	* @param orgManagerName 管理信息-机构负责人名称
	* @param orgManagerPhone 管理信息-机构负责人电话
	* @param createTime 时间信息-创建时间
	* @param updateTime 时间信息-更新时间[初始化=NULL]
	* @return List<Organization> 实体List
	*/
	public List<Organization> queryList(Long orgId, String orgCode, Integer orgType, Integer orgStatus, Integer isDel, Integer orgOrder, Integer orgLevel, Integer isParent, Long orgPid, String orgName, String orgAliasName, String orgDesc, String orgPhone, String orgFax, String orgWebsite, String provinceId, String cityId, String districtId, String orgAddress, BigDecimal lng, BigDecimal lat, Long orgManagerId, String orgManagerName, String orgManagerPhone, Long createTime, Long updateTime);

	/**
	 * 编辑机构状态（逻辑删除 | 恢复）
	 * @param orgId 机构Id
	 * @param isDel 是否删除状态
	 */
	public void editIsDel(Long orgId, Integer isDel);
	
	/**
	 * 根据父Id查询子机构信息
	 * @param orgPid 父机构Id
	 * @return List<Organization>
	 */
	public List<Organization> querySubList(Long orgPid);
	
	/**
	 * 查询用户机构信息
	 * @param userId 用户Id
	 * @return List<Organization>
	 */
	public List<Organization> queryUserOrgs(Long userId);
	
}